<?php

/**
 * Bootstrap ONCUT
 * @version 0.6
 *
 * ChangeLog
 *
 * 0.6 _initTranslation - Mehrsprachigkeit Zend_Locale und Zend_Translate werden initialisiert
 * 0.5 _initHelpers     - action und view helper pfade werden gesetzt
 * 0.4 _initView        - Header daten werden gesetzt
 * 0.3 _initLayiut      - MVClayout gestartet und layoutSwitch plugin initialisert
 * 0.2 _initAutoload    - namespace fuer das defaultmodul wird gesetzt
 *                        weitere einstellungen fuer module sind in application.ini
 * 0.1 _initApplication - frontcontroller wird initalisiert; URI wird definiert
 *                        hier koennen globale Variablen und Constanten hinzugefuegt werden
 */

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
    protected $_acl = null;
    protected $_auth = null;

    /**
     * @var string
     */
    protected $_lang;

    /**
     * @var Zend_Controller_Front
     */
    protected $_fc;

    /**
     * @var Zend_Layout
     */
    protected $_layout;

    protected function _initApplication() {

        $this->_fc = Zend_Controller_Front::getInstance();

        $prefix = "http://";
        if ($_SERVER['SERVER_PORT'] == "443") {$prefix = "https://";}
        $scriptFilename = explode('/',$_SERVER['SCRIPT_NAME']);
        array_pop($scriptFilename);
        $scriptFilename = implode('/',$scriptFilename);
        Zend_Registry::set('uri', $prefix.$_SERVER['SERVER_NAME'].$scriptFilename.'/');
    }

    protected function _initAutoload(){
        // Erste funktion des ganzen Systems!
        $modelLoader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath' => APPLICATION_PATH.'/modules/default'));

        return $modelLoader;
    }

    /*
    * Initialiert Zend Layout fuer die Verwendung in allen Teilen des MVC-Modells
    *
    * zugriff im controller: $this->_helper->layout->foo();
    * zugriff im View: $this->layout()->foo();
    * $layout = Zend_Layout::getMvcInstance();
    */
    protected function _initLayout(){
        $this->_layout = Zend_Layout::startMvc();
        $this->_layout->setLayoutPath(APPLICATION_PATH."/layout/");
        $this->_layout->setLayout('default');
    }

    protected function _initView() {
        $view = $this->_layout->getView();

        // Tags
        $view->setEscape('htmlentities');
        $view->setEncoding('UTF-8');

        //der title kann in jeder Action gesetzt werden - SEO
        $view->headTitle('ONCUT');
        $view->headTitle()->setSeparator(' - ');
    }

    /**
     * helperPaths werden hier ausgelagert in den libraryordner
     */
    protected function _initHelpers(){
        //viewhelper
        $this->_layout->getview()->addHelperPath(INCLUDE_PATH.'/helpers/views');

        //actionhelper
        Zend_Controller_Action_HelperBroker::addPath(INCLUDE_PATH.'/helpers/controllers');
    }

    /**
     * initialisiert Translateobjekt fuer die Verwendung in allen Teilen des MVC-Musters
     */
    protected function _initTranslation(){
        Zend_Registry::set('Zend_Locale', new Zend_Locale('de'));
        //Zend_Locale::disableCache(true);

        $this->_lang = Zend_Registry::get('Zend_Locale')->getLanguage();
        $translate = new Zend_Translate(array('adapter' => 'gettext',
                                              'content' => APPLICATION_PATH.'/languages/'.$this->_lang.'.mo',
                                              'locale' => $this->_lang));
        Zend_Registry::set('Zend_Translate', $translate);
    }

    /**
     * Zugriffsverwaltung der Benutzergruppen wird an Zugriffskontrollplugin uebergeben
     *
     */
    protected function _initAuthentication(){
        $this->_acl  = new Model_UserAcl();
        $this->_auth = Zend_Auth::getInstance();
    }

    /**
     *
     *
     */
    public function _initRoutes(){
        $router = new Zend_Controller_Router_Rewrite();

        $router->addConfig(new Zend_Config_Xml(APPLICATION_PATH . '/configs/route.xml'));
        Zend_Registry::set('router', $router);

        $fcontr = Zend_Controller_Front::getInstance();

        $fcontr->setRouter($router);
    }

    /**
     * plugins werden registriert
     */
    protected function _initPlugins(){
        //schlatet zum modulspezifischen layout
        $this->_fc->registerPlugin(new Plugin_LayoutSwitch($this->_layout));

        //schaltet zur modulspezifischen navigation
        $this->_fc->registerPlugin(new Plugin_NavigationSwitch($this->_layout, $this->_auth, $this->_acl));

        //prueft zugangsberechtigung
        $this->_fc->registerPlugin(new Plugin_AccessCheck($this->_acl, $this->_auth));
    }

    /**
     * Workaround gegen die Magic Quotes.
     * Bei der Uebergabe von " oder § in Passwoertern wurde immer ein vorangestellter
     * Backward Slash beigefuegt. Dies wird hierdurch unterdrueckt.
     */
    public function _initMagicQuotes() {
        /**
         * On shared hosting, put setting
         * php_flag magic_quotes_gpc Off
         * in the .htaccess file may cause 500 Server Error on server.
         * The following snippet disable magic_quotes_gpc at runtime.
         * See http://us.php.net/manual/en/security.magicquotes.disabling.php
         */
        if (get_magic_quotes_gpc()) {
            $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
            while (list($key, $val) = each($process)) {
                foreach ($val as $k => $v) {
                    unset($process[$key][$k]);
                    if (is_array($v)) {
                        $process[$key][stripslashes($k)] = $v;
                        $process[] = &$process[$key][stripslashes($k)];
                    } else {
                        $process[$key][stripslashes($k)] = stripslashes($v);
                    }
                }
            }
            unset($process);
        }
    }

    /**
     * Konfiguration in die Registry schreiben
     */
    protected function _initConfig() {
        $config = new Zend_Config($this->getOptions(), true);
        Zend_Registry::set('config', $config);

        Zend_Registry::set('video', $config->get('video')->toArray());
        return $config;
    }

}
